using OhioState.Math;

namespace OhioState.Graphics
{
    /// <summary>
    /// This interface represents a light with common parameters,
    /// as well as methods for turning it on and off.
    /// </summary>
    public interface ILight
    {
        /// <summary>
        /// Get or set ambient component of the light.
        /// </summary>
        OSUColor Ambient { get;}
        /// <summary>
        /// Get or set diffuse component of the light.
        /// </summary>
        OSUColor Diffuse { get;}
        /// <summary>
        /// Get or set specular component of the light.
        /// </summary>
        OSUColor Specular { get;}
        /// <summary>
        /// Get or set the position of the light.
        /// </summary>
        Vector4 Position { get;}

        /// <summary>
        /// Turn the light on.
        /// </summary>
        /// <param name="renderPanel">Specify the render panel on which the light should be enabled. </param>
        void Enable(IRenderPanel renderPanel);
        
        /// <summary>
        /// Turn the light on.
        /// </summary>
        /// <param name="renderPanel">Specify the render panel on which the light should be enabled.</param>
        /// <param name="lightNumber">The light number for multiple light sources </param>
        void Enable(IRenderPanel renderPanel, int lightNumber);

        /// <summary>
        /// Turn the light off.
        /// </summary>
        /// <param name="renderPanel">Specify the render panel on which the light should be disabled. </param>
        void Disable(IRenderPanel renderPanel);
    }
}
